<?php
namespace libraries\common;

defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * Database CURD Trait
 *
 * @desc    基于 DB 的增删改查, 提供CURD的快捷方法
 * @version 1.0.0
 * @author  Jason
 * @date	2017年6月13日 下午3:59:55
 * @desc	该文件(Trait)的方法择（zhái）自 LanguageCURD.php 并加以通用(反射)处理。
 * @desc	另外，其实 LanguageCURD.php 是间接摘自 Lib_area.php，因为这个是最先成型的。
 */
trait DatabaseCURD
{
	/**
	 * 创建地区处理器
	 *
	 * @method  POST
	 * @author  Jason
	 * @date	2017年5月15日 下午3:18:16
	 * @param   string $mapping 表映射，代码调用传参数(非表单参数)
	 * @param   $name, $abstract, $summary, $latitude, $longitude, ...
	 *
	 * @return  [<status>, <content>]	一个两元素数组，第一个元素表示状态，第二个表示相应内容
	 * 	        eg:	[true, <userData>]
	 * 				[false, <errorMesg>]
	 */
	public function create($mapping = 'master')
	{
		$component = str_replace('Lib_', '', get_class());
		$component_mapping = (is_string($mapping) && $mapping !== 'master') ? "{$component}_{$mapping}" : $component;
		
		$this->CI->load->library('form_validation');
		$this->CI->load->database();
		
		$status = false;
		$content = [];
		if(FALSE === $this->CI->form_validation->run("{$component_mapping}_create")) {
			$errorKey = $this->CI->form_validation->error_array();
			$status = false;
			$content = $errorKey;
		} else {
			$data = $this->CI->input->post();
			
			list($status, $content) = $this->{"mod_$component"}->create_instance($data, $mapping);
			if (!$status) {
				$content = ['common_msg_create_faild'];
			}
		}
		
		return [$status, $content];
	}
	
	/**
	 * 更新地区处理器
	 *
	 * @method  POST
	 * @author  Jason
	 * @date	2017年5月25日 下午2:28:51
	 * @param   string $mapping 表映射，代码调用传参数(非表单参数)
	 * @param   $id
	 * @param   $name, $abstract, $summary, $latitude, $longitude, ...
	 *
	 * @return  [<status>, <content>]	一个两元素数组，第一个元素表示状态，第二个表示相应内容
	 * 	        eg:	[true, <userData>]
	 * 				[false, <errorMesg>]
	 */
	public function update($mapping = 'master')
	{
		$component = str_replace('Lib_', '', get_class());
		$component_mapping = (is_string($mapping) && $mapping !== 'master') ? "{$component}_{$mapping}" : $component;
		
		$this->CI->load->library('form_validation');
		$this->CI->load->database();
		
		$status = false;
		$content = [];
		if(FALSE === $this->CI->form_validation->run("{$component_mapping}_create")) {
			$errorKey = $this->CI->form_validation->error_array();
			$status = false;
			$content = $errorKey;
		} else {
			$data = $this->CI->input->post();
			$id = $this->CI->input->post('id');
			unset($data['id']);
			
			list($status, $content) = $this->{"mod_$component"}->update_instance_by_id($id, $data, $mapping);
			if ($status) {
				$content = [];
			} else {
				$content = ['common_msg_update_faild'];
			}
		}
		
		return [$status, $content];
	}
	
	/**
	 * 删除地区处理器
	 *
	 * @method  POST
	 * @author  Jason
	 * @date	2017年5月25日 下午2:28:51
	 * @param   string $mapping 表映射，代码调用传参数(非表单参数)
	 * @param   $id
	 *
	 * @return  [<status>, <content>]	一个两元素数组，第一个元素表示状态，第二个表示相应内容
	 * 	        eg:	[true, <userData>]
	 * 				[false, <errorMesg>]
	 */
	public function delete($mapping = 'master')
	{
		$component = str_replace('Lib_', '', get_class());
		$component_mapping = (is_string($mapping) && $mapping !== 'master') ? "{$component}_{$mapping}" : $component;
		
		$this->CI->load->library('form_validation');
		$this->CI->load->database();
		
		$status = false;
		$content = [];
		if(empty($id = $this->CI->input->post_get('id'))) {
			$status = false;
			$content = ['common_msg_not_found'];
		} else {
			list($status, $content) = $this->{"mod_$component"}->delete_instance_by_id($id, $mapping);
			if ($status) {
				$status = true;
				$content = [];
			} else {
				//$content = ['common_msg_delete_faild'];
				//$content = array_merge($content, ['common_msg_delete_faild']);
				$content[] = 'common_msg_delete_faild';
			}
		}
		
		return [$status, $content];
	}
	
}
